#include<iostream>
#include"Comm.hpp"

int main()
{
        // 无捕获 Lambda，可以转换为函数指针
    auto handler = [](int signum) {
        std::cout << "\n捕获到中断信号 (Ctrl+C)，清理共享内存..." << std::endl;
        shm.DeM();
        shm.RemoveM();
        exit(signum);
    };
    signal(SIGINT, handler);  // SIGINT 是 Ctrl+C 的信
    shm.GetSharedM();
    shm.AttachM();
    sleep(3);

//IPC通信
    Data*strinfo=(Data*)shm.GetAddr();
    printf("%p\n",strinfo);//打印的client与server值不同虚拟地址空间
  //  std::cout<<((int*)(void*)strinfo)[0]<<std::endl;错误的，我要打印的是地址，不是地址上第一个Int的值(这里会输出0，未初始化的内存空间首先会初始化成0)
   


   //等管道有消息才通信
   NamePipe namepipe_w(CREATENAMEPIPE|OPENWITHREAD);
   while(1)
   {


        std::cout<<"server:read"<<namepipe_w.ReadPipe()<<std::endl;

    std::cout<<strinfo->image<<std::endl;
    std::cout<<strinfo->lasttime<<std::endl;
    std::cout<<strinfo->status<<std::endl;
    strncpy(strinfo->status,"outofdate",sizeof(strinfo->status));

    sleep(0.1);
   }
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
    shm.DeM();
    sleep(6);
    shm.RemoveM();//标记共享内存段为“待销毁”，但​​只有当所有进程都解除关联后，内核才会真正释放资源​​。
}